package com.hxm.demo.test1;

/**
 * @author huangxiaoming
 * @date 2022/10/2
 **/
public class TestReplaceString {

    /**
     * 777. 在LR字符串中交换相邻字符
     *
     * @param args
     */
    public static void main(String[] args) {
        String start = "LXXLXRLXXL";
        String end = "LXLXXRLXLX";
        boolean b = canTransform(start, end);
        System.out.println(b);
    }

    /**
     * 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串（例如"RXXLRXRXL"）中进行移动操作。
     * 一次移动操作指用一个"LX"替换一个"XL"，或者用一个"XR"替换一个"RX"。现给定起始字符
     * 串start和结束字符串end，请编写代码，当且仅当存在一系列移动操作使得start可以转换成end时，
     * 返回True。
     *
     * @param start
     * @param end
     * @return
     */
    public static boolean canTransform(String start, String end) {
        /**
         * L只能跨过X左移 R只能跨过X右移
         * start end 去掉x应该相等
         * L在Start中的位置大于在end中的位置 i>= j
         * L在end中的位置小于在start中的位置 i<= j
         */
        int i = 0,j = 0;
        int n = start.length();
        while (i < n && j < n) {
            while (i < n && start.charAt(i) == 'X') {
                i++;
            }
            while (j < n && end.charAt(j) == 'X') {
                j++;
            }
            if (i < n && j < n) {
                if (start.charAt(i) != end.charAt(j)) {
                    return false;
                }
                if (start.charAt(i) == 'L' && i < j) {
                    return false;
                }
                if (start.charAt(i) == 'R' && i > j) {
                    return false;
                }
                i++;
                j++;
            }
        }

        while (i < n) {
            if (start.charAt(i) != 'X') {
                return false;
            }
            i++;
        }
        while (j < n) {
            if (end.charAt(j) != 'X') {
                return false;
            }
            j++;
        }
        return true;
    }
}
